将所有的信息封装在构造函数中,并且在第一次调用构造函数的时候初始化原型,从而避免了将方法定义在构造函数内部,这使得构造函数模式和原型模式结合得更加紧密。
动态原型模式 (推荐 Es6,过时禁止使用的)
js
function Person(name, age) {
this.name = name;
this.age = age;
if (typeof this.sayHello !== "function") {
Person.prototype.sayHello = function () {
console.log(
"Hello, my name is " +
this.name +
" and I am " +
this.age +
" years old."
);
};
}
}
let person1 = new Person("John", 30);
let person2 = new Person("Alice", 25);
person1.sayHello(); // 输出:Hello, my name is John and I am 30 years old.
person2.sayHello(); // 输出:Hello, my name is Alice and I am 25 years old.
缺点
- 对象的构造过程不够清晰,可能会导致代码难以理解和维护。
- 对象的方法是在第一次调用构造函数时才会被初始化,这可能会导致初始化延迟和不确定性。